package cn.tedu.spring.diautowired;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * Author：程Sir
 * Name： SpringTest01
 * Content:
 */
@Component
public class WorkerResource {
    private String name = "光头强";

    @Autowired
    private Saw saw1;

    @Resource
    private Axe axe;
    @Resource
    // 当前的方法没有返回值，且添加的注解不是@Bean，那么spring进行管理时是不会创建任何对象的！
    // 添加了@Autowired注解，spring进行管理时，发现有参数列表操作，那么spring就会在容器中查找该类对象！
    // 如果有且唯一，则注入成功！ 否则找到的该类型对象不止一个，则按照名称进行注入，匹配则注入成功，反之直接报错
    // 如果能够给参数列表中的属性注入值成功，则给成员变量的赋值也应一定成功！
    public void setAxe(Axe axe) {
        this.axe = axe;
    }
    public Axe getAxe() {
        return axe;
    }
    // 构造方法完成对象注入
    public WorkerResource(Axe axe){
        this.axe = axe;
    }

    public void work(){
        System.out.println(name + "使用："+ axe.getName() + "砍树！");
    }

    @Override
    public String toString() {
        return "Worker{" +
                "name='" + name + '\'' +
                ", saw=" + saw1 +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Saw getSaw() {
        return saw1;
    }

    public void setSaw(Saw saw) {
        this.saw1 = saw;
    }
}
